// 阻塞代码实例
// var fs = require("fs");

// var data = fs.readFileSync('input.txt');

// console.log(data.toString());
// console.log("程序执行结束1");

// // 非阻塞代码实例
// var fs = require("fs");

// fs.readFile('input.txt', function (err, data) {
//     if (err) return console.error(err);
//     console.log(data.toString());
// });

// console.log("程序执行结束2");


// 事件驱动程序
// 引入 events 模块
// var events = require('events');
// 创建 eventEmitter 对象
// var eventEmitter = new events.EventEmitter();
 
// 创建事件处理程序
// var connectHandler = function connected() {
//    console.log('连接成功。');
   // 触发 data_received 事件 
//    eventEmitter.emit('data_received');
// }

// 绑定 connection 事件处理程序
// eventEmitter.on('connection', connectHandler);
 
// 使用匿名函数绑定 data_received 事件
// eventEmitter.on('data_received', function(){
//    console.log('数据接收成功。');
// });
 
// 触发 connection 事件 
// eventEmitter.emit('connection');
// console.log("程序执行完毕。");


// Node 应用程序是如何工作的？
// 在 Node 应用程序中，执行异步操作的函数将回调函数作为最后一个参数， 回调函数接收错误对象作为第一个参数。
// var fs = require("fs");
// fs.readFile('input.txt', function (err, data) {
//    if (err){
//       console.log(err.stack);
//       return;
//    }
//    console.log(data.toString());
// });
// console.log("程序执行完毕");


// Node.js EventEmitter
// Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
// 引入 events 模块
// var events = require('events');
// 创建 eventEmitter 对象
// var eventEmitter = new events.EventEmitter();
// events 模块只提供了一个对象： events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
// 你可以通过require("events")来访问该模块。

// var EventEmitter = require('events').EventEmitter; 
// var event = new EventEmitter(); 
// event.on('some_event', function() { 
//     console.log('some_event 事件触发'); 
// }); 
// setTimeout(function() { 
//     event.emit('some_event'); 
// }, 1000); 


// Node.js模块系统
function Hello() { 
   var name; 
   this.setName = function(thyName) { 
       name = thyName; 
   }; 
   this.sayHello = function() { 
       console.log('Hello ' + name); 
   }; 
}; 
module.exports = Hello;